/**
 * 深拷贝
 */

const obj1 = {
  age: 20,
  name: "xxx",
  address: {
    city: "beijing",
  },
  arr: ["a", "b", "c"],
}

const obj2 = deepclone2(obj1)
obj2.address.city = 'shanghai'
obj2.arr[0] = 'a1'
console.log(obj1.address.city)
console.log(obj1.arr[0])

/**
 * 深拷贝
 * @param {Object} obj 要拷贝的对象
 */
function deepclone(obj = {}) {
  if(typeof obj !== 'object' || obj == null) {
    // obj是null或者不是对象和数组，直接返回
    return obj
  }

  // 初始化返回结果
  let result
  if (obj instanceof Array) {
    result = []
  } else {
    result = {}
  }

  for (let key in obj) {
    // 保证key不是原型的属性
    if (obj.hasOwnProperty(key)) {
      // 递归
      result[key] = deepclone(obj[key])
    }
  }


  // 返回结果
  return result
}


function deepclone2(obj = {}) {
  if(typeof obj !== 'object' || obj == null) {
    return obj
  }

  let result
  if(Object.prototype.toString.call(obj) === '[object Array]') {
    result = []
  } else if(Object.prototype.toString.call(obj) === '[object Object]') {
    result = {}
  }

  for (let key in obj) {
    if(obj.hasOwnProperty(key)) {
      result[key] = deepclone2(obj[key])
    }
  }

  return result
  
}
